package com.bwc.aidemo.amap

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.amap.api.maps.AMap
import com.amap.api.maps.MapView
import com.amap.api.maps.model.LatLng

import com.amap.api.maps.model.MyLocationStyle
import com.amap.api.maps.model.Polyline
import com.bwc.aidemo.R
import com.bwc.aidemo.databinding.ActivityAmapAcyivityBinding
import com.mojawa.mj_amap.MJMApViewLifecycle


import com.mojawa.mj_amap.util.MJMapViewUtil

import com.bwc.aidemo.viewmodel.AmapViewModel
import com.bwc.aidemo.arouter.RoutePath
import com.bwc.aidemo.http.ApiClients
import com.bwc.aidemo.paozhong.CozeApiResponse
import com.bwc.aidemo.paozhong.SportContentData
import com.bwc.aidemo.paozhong.SportParameters
import com.bwc.aidemo.paozhong.SportRequest
import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import com.mojawa.mj_util.permiss.PermissionUtils
import com.mojawa.mj_util.gps.GpsSignalMonitor
import com.mojawa.mj_util.gps.GpsSignalStrength
import com.mojawa.mj_util.location.LocationService
import com.mojawa.mj_util.time.MJTimeUtil
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response


const val TAG = "AmapAcyivity"
@Route(path = RoutePath.Amap)
class AmapAcyivity : AppCompatActivity() {
    //初始化databinding和viewmodel
    private lateinit var dataBinding: ActivityAmapAcyivityBinding
    private lateinit var viewModel: AmapViewModel
    private lateinit var mMJMApViewLifecycle:MJMApViewLifecycle
    private var mapView: MapView? = null
    private var aMap: AMap? = null
    private var polyline: Polyline? = null
    private lateinit var amapAdapter: AmapAdapter
    private var currentValue:Double = 0.00
    private val handler = Handler(Looper.getMainLooper())  // 主线程 Handler
    private var myLatLngList: ArrayList<AMapLatLng> = ArrayList()

    @Autowired(name = "target") // 可指定参数名
    @JvmField
    var isTarget: Boolean = false

    @Autowired
    @JvmField
    var distanceNumbers: ArrayList<Double>? = null

    @Autowired
    @JvmField
    var durationNumbers: ArrayList<Double>? = null


    private var times : String ?= null
    private var peisu : String ?= null
    private var juli : String ?= null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ARouter.getInstance().inject(this)


        Log.d(TAG, "distanceNumbers: ${distanceNumbers}")
        Log.d(TAG, "durationNumbers: $durationNumbers")
        Log.d(TAG, "isTarget: ${isTarget}")


        mMJMApViewLifecycle = MJMApViewLifecycle()
        //初始化databinding和viewmodel
        dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_amap_acyivity)
        viewModel = ViewModelProvider(this)[AmapViewModel::class.java]

        mapView = dataBinding.maplocal
        mMJMApViewLifecycle.onCreate(savedInstanceState, mapView)

        if (aMap == null) {
            aMap = mapView!!.map
        }
        //设置地图
        initMap()
        //开启前台服务
        startService()

        //初始化GPS信号监控
        initGps()
        //初始化适配器
        initAdapter()

        //设置观察者
        observeViewModel()

        //更新UI和距离
        updateUiDistance()

        //暂停恢复功能
        pauseRecovery()

        //结束运动
        pausejieshu()


        // 测试代码
//        handler.postDelayed(object : Runnable {
//            override fun run() {
//                currentValue += 50
//
//                // 再次延迟1秒执行
//                handler.postDelayed(this, 1000)
//            }
//        }, 1000)
    }

    private fun pausejieshu() {
        dataBinding.appJieshu.setOnClickListener {
            ARouter.getInstance().build(RoutePath.endmap).withParcelableArrayList("endMapLang",myLatLngList).navigation()
            Log.i(TAG, "pausejieshu: $myLatLngList")
            finish()
        }
    }

    private fun initAdapter() {
        amapAdapter = AmapAdapter()
        dataBinding.rec.layoutManager = LinearLayoutManager(this)
        dataBinding.rec.adapter = amapAdapter

    }

    private fun initMap() {
//        MJMapViewUtil.showNight(aMap)
        MJMapViewUtil.locationScope(aMap)
        initMyLocationStyle()
    }

    private fun observeViewModel() {
        viewModel.gpsSignalStrength.observe(this, Observer { signalStrength ->
            when (signalStrength) {
                GpsSignalStrength.STRONG -> {
                    Toast.makeText(this, "GPS信号强", Toast.LENGTH_SHORT).show()
                }
                GpsSignalStrength.WEAK -> {
                    Toast.makeText(this, "GPS信号弱", Toast.LENGTH_SHORT).show()
                }
                GpsSignalStrength.NO_SIGNAL -> {
                    Toast.makeText(this, "GPS无信号", Toast.LENGTH_SHORT).show()
                }
            }
        })

        viewModel.totalDistance.observe(this, Observer { distance ->
            updateUiText(distance)
        })

        viewModel.timeElapsed.observe(this, Observer { time ->
            dataBinding.time.text = time





            if (isTarget){
                durationNumbers?.forEach {value->
                    val timeSeconds = timeStrToSeconds(time)
                    val valueSeconds = valueToSeconds(value)
                    Log.d(TAG, "observeViewModel: ${timeSeconds},${valueSeconds},${timeSeconds == valueSeconds}")
                    if (timeSeconds == valueSeconds){
                        times = time
                        getVoice()
                    }
                }
            }
        })
        viewModel.kilometerDataList.observe(this, Observer { data ->
            run {
                data?.let {
                    for (kilometerData in it) {
                        amapAdapter.addKilometerData(kilometerData)
                    }
                }
            }
        })
    }

    private fun initGps() {
        val gpsSignalMonitor = GpsSignalMonitor(this)
        gpsSignalMonitor.currentSignalStrength.observe(this, Observer { signalStrength ->
            viewModel.updateGpsSignal(signalStrength)
        })
        gpsSignalMonitor.startMonitoring()
    }

    private fun pauseRecovery() {
        dataBinding.suspend.setOnClickListener {
            viewModel.pauseTimer()
        }
        dataBinding.recover.setOnClickListener {
            viewModel.resumeTimer()
        }
    }

    private fun updateUiDistance() {
        LocalBroadcastManager.getInstance(this).registerReceiver(
            distanceUpdateReceiver, IntentFilter("RunMiddleDistance")
        )
    }

    private fun valueToSeconds(value: Double): Int {
        return value.toInt() * 60 .toInt()
    }
    private // 将时间格式（00:00:03）转换为总秒数
    fun timeStrToSeconds(timeStr: String): Int {
        val parts = timeStr.split(":").map { it.toInt() }
        return parts[0] * 3600 + parts[1] * 60 + parts[2]
    }

    private val distanceUpdateReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            val totalDistance = intent?.getDoubleExtra("total_distance", 0.00)
            val points = intent?.getParcelableArrayListExtra<LatLng>("points")


            totalDistance?.let {
                viewModel.updateDistance(it)
                //测试代码 -- 距离增加
//                viewModel.updateDistanceAndCalculatePace(currentValue)
                viewModel.updateDistanceAndCalculatePace(it)
            }
            if (points?.size!! >= 2) {
                drawLines(MJMapViewUtil.convertToAMapLatLng(points))
                myLatLngList = ArrayList(points.map { latLng ->
                    AMapLatLng(latLng.latitude, latLng.longitude)
                })
            }

        }
    }

    private fun updateUiText(totalDistance: Double) {
        val formattedDistance = String.format("%.2f", totalDistance)
        dataBinding.distance.text = formattedDistance
        juli = formattedDistance
        dataBinding.speedallocation.text = MJTimeUtil.calculatePace(
            viewModel.timerManager.getSeconds(),
            formattedDistance.toDouble() / 1000
        )
        peisu = MJTimeUtil.calculatePace(
            viewModel.timerManager.getSeconds(),
            formattedDistance.toDouble() / 1000
        )
        if (isTarget){
            distanceNumbers?.forEach {value->
                if (value.toString() == formattedDistance){
                    getVoice()
                }
            }
        }


    }

    private fun drawLines(points: List<LatLng>?) {
        polyline = MJMapViewUtil.showLines(aMap, points,false)
    }


    private fun startService() {
        if (!MJTimeUtil.isServiceRunning(this, LocationService::class.java)) {
            MJTimeUtil.startServiceCompat(this, Intent(this, LocationService::class.java))
        }
    }

    private fun initMyLocationStyle() {
        var myLocationStyle = MyLocationStyle()
        MJMapViewUtil.systemBlueDot(aMap = aMap, myLocationStyle = myLocationStyle)
    }

    override fun onResume() {
        super.onResume()
        PermissionUtils.checkLocationPermission(this){

        }

    }

    override fun onDestroy() {
        super.onDestroy()
        if (MJTimeUtil.isServiceRunning(this, LocationService::class.java)){
            MJTimeUtil.closeServiceCompat(this, Intent(this, LocationService::class.java))
        }
        viewModel.destroy()

    }


    private fun getVoice(){
        val params = SportParameters(
            currentCalorie = null,
            currentDistance = juli,
            currentFrequency = "120次/分钟",
            currentHeart = null,
            currentSpeed = peisu,
            currentSportMin = times,
            running = true,
            target = true,
            targetCalorie = null,
            targetDistance = "2km",
            targetFrequency = null,
            targetHeart = null,
            targetSpeed = null,
            targetSportMin = "6min"
        )

        // 构建完整请求对象
        val request = SportRequest(
            workflow_id = "7520463758373027892",
            parameters = params
        )


        ApiClients.apiService.sendVoice(request).enqueue(object : Callback<ResponseBody> {
            private val gson = Gson()

            override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                if (response.isSuccessful) {

                    val responseBodyStr = try {
                        response.body()?.string() ?: run {
                            Log.e("paoqian", "响应体为空")
                            return
                        }
                    } catch (e: Exception) {
                        Log.e("paoqian", "读取响应体失败", e)
                        return
                    }

                    Log.d("paoqian", "响应内容: $responseBodyStr")

                    // 第一步：解析外层响应
                    val cozeApiResponse: CozeApiResponse? = try {
                        gson.fromJson(responseBodyStr, CozeApiResponse::class.java)
                    } catch (e: JsonSyntaxException) {
                        Log.e("paoqian", "外层JSON解析失败", e)
                        return
                    }

                    if (cozeApiResponse?.code != 0) {
                        Log.e("paoqian", "API业务失败: code=${cozeApiResponse?.code}")
                        return
                    }

                    // 第二步：解析内层 data（此时 data 是单个字符串）
                    val sportContentData: SportContentData? = try {
                        gson.fromJson(cozeApiResponse.data, SportContentData::class.java)
                    } catch (e: JsonSyntaxException) {
                        Log.e("paoqian", "内层data解析失败", e)
                        return
                    }

                    // 提取核心提示文本
                    val tips = sportContentData?.data ?: "未获取到提示"
                    Log.d("paoqian", "运动提示: $tips")
                    Handler(Looper.getMainLooper()).postDelayed({

                    },2000)


                    // TODO: 在这里使用提示文本（如显示到UI）
                    // 例如：textView.text = tips

                } else {
                    Log.e("paoqian", "HTTP请求失败: 状态码=${response.code()}")
                }
            }

            override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                Log.e("paoqian", "请求失败", t)
            }
        })

    }



    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        PermissionUtils.handlePermissionsResult(requestCode, permissions, grantResults, this)
    }
    //测试数据
//    private val latLngList = listOf(
//        LatLng(31.322177650477183,120.85187066719061),
//        LatLng(31.322168693985102,120.85184371921963),
//        LatLng(31.321169232159317, 120.85132566111999),
//        LatLng(31.321082020074485, 120.85153834716708),
//        LatLng(31.3210765105167, 120.85155418570177),
//        LatLng(31.321077100985935, 120.8515940069279),
//        LatLng(31.321076590805518, 120.85161696233823),
//        LatLng(31.321087424166986, 120.85166599892075),
//        LatLng(31.321092493481043, 120.85168923575884),
//        LatLng(31.321102528664653, 120.85172908318506),
//        LatLng(31.32110878973781, 120.85175016949869),
//        LatLng(31.32111649924194, 120.85179898912091),
//        LatLng(31.321113579080475, 120.85183053610764),
//        LatLng(31.321097728470424, 120.85188245933273),
//        LatLng(31.321096756238294, 120.85190737363725),
//        LatLng(31.321108358853394, 120.85194805217759),
//        LatLng(31.321107767250407, 120.85197048491773),
//        LatLng(31.32111563262387, 120.85201744237514),
//        LatLng(31.32112072036493, 120.85203741422059),
//        LatLng(31.321132939806635, 120.85207108628525),
//        LatLng(31.321149230732086, 120.85207055103945),
//        LatLng(31.321162695221375, 120.85207656030677),
//        LatLng(31.321185132216307, 120.85212921924682),
//        LatLng(31.321191024156448, 120.85215208815298),
//        LatLng(31.32120787713831, 120.85218316575293),
//        LatLng(31.321218308995334, 120.85220740927645),
//        LatLng(31.32123392429499, 120.85226989887164),
//        LatLng(31.32124038714304, 120.85229839962116),
//        LatLng(31.321258653874313, 120.85235173077179),
//        LatLng(31.321268474969266, 120.85237612962585),
//        LatLng(31.321287185312297, 120.85241905543562),
//        LatLng(31.3212962227336, 120.85244498992252),
//        LatLng(31.321316722259052, 120.85249490361603),
//        LatLng(31.321334649475702, 120.85251531878563),
//        LatLng(31.321378978294838, 120.85251954384353),
//        LatLng(31.321400196638518, 120.85251337738534),
//        LatLng(31.32143298147993, 120.85249943944741),
//        LatLng(31.321445511769717, 120.85249791593887),
//        LatLng(31.32149232542638, 120.85250621121412),
//        LatLng(31.321515654189287, 120.85251177069551),
//        LatLng(31.32156758151359, 120.85250700118617),
//        LatLng(31.321610963720712, 120.85249170078899),
//        LatLng(31.321632224486397, 120.85248268953428),
//        LatLng(31.321672176458485, 120.85246691595822),
//        LatLng(31.32168987232882, 120.85245832766854),
//        LatLng(31.32170919700715, 120.85244852064191),
//        LatLng(31.321746120900162, 120.85243183134364),
//        LatLng(31.321766347802694, 120.85242470908999),
//        LatLng(31.321813288229205, 120.85240652929787),
//        LatLng(31.321833472204233, 120.85239651564997),
//        LatLng(31.321874760676195, 120.85238028202482),
//        LatLng(31.32189444835563, 120.85237034814111),
//        LatLng(31.3219350748745, 120.8523505835473),
//        LatLng(31.321955710028835, 120.8523399991932),
//        LatLng(31.32199656085237, 120.85232542276573),
//        LatLng(31.322017303117136, 120.85231714692897),
//        LatLng(31.322058618312617, 120.85230051863378),
//        LatLng(31.32207820261913, 120.8522929591885),
//        LatLng(31.32211603480774, 120.85227682079723),
//        LatLng(31.32213451444287, 120.85226949286775),
//        LatLng(31.32217423606511, 120.85225254804085),
//        LatLng(31.322194034761928, 120.85224453242843),
//        LatLng(31.322236353000346, 120.85222574171796),
//        LatLng(31.322258695653563, 120.85221636966074),
//        LatLng(31.32230183396608, 120.85219940601132),
//        LatLng(31.32232372725855, 120.85219352343276),
//        LatLng(31.32236551270856, 120.85218169118103),
//        LatLng(31.32238717470057, 120.85217881936771),
//        LatLng(31.322427520891193, 120.85219593143096),
//        LatLng(31.322432058025083, 120.8522191684147),
//        LatLng(31.322436697972744, 120.85226354462792),
//        LatLng(31.32243985508376, 120.85228109353304),
//        LatLng(31.322414619827544, 120.85231914818041),
//        LatLng(31.322393723837035, 120.85233087567624),
//        LatLng(31.322349827423555, 120.8523475937343),
//        LatLng(31.322323935364555, 120.85235093070612),
//        LatLng(31.322275360123157, 120.85236422997465),
//        LatLng(31.322254071699078, 120.85237118081342),
//        LatLng(31.322213731548885, 120.85238713851638),
//        LatLng(31.322195830222284, 120.85239566578247),
//        LatLng(31.322154860177235, 120.85240722580066),
//        LatLng(31.322133502254328, 120.85241600616109),
//        LatLng(31.322089709636412, 120.85243482504195),
//        LatLng(31.322067591550585, 120.85244225600302),
//        LatLng(31.32202589702519, 120.85245983924544),
//        LatLng(31.322005213779395, 120.85246834185128),
//        LatLng(31.32196236757516, 120.8524862159858),
//        LatLng(31.321941384194965, 120.85249376379787),
//        LatLng(31.321898492497493, 120.85250829978223),
//        LatLng(31.32187812780032, 120.85251663088827),
//        LatLng(31.321833552147957, 120.85253242805578),
//        LatLng(31.321814905577234, 120.85254099954182),
//        LatLng(31.32177399995378, 120.85255714998516),
//        LatLng(31.32175159648024, 120.85256561869755),
//        LatLng(31.321709944791973, 120.85258096811842),
//        LatLng(31.321688417844175, 120.85258736561558),
//        LatLng(31.32164493448811, 120.85260150359136),
//        LatLng(31.32162324285964, 120.85260882872547),
//        LatLng(31.321579946818478, 120.85262449938588),
//        LatLng(31.321559136037866, 120.85263377807092),
//        LatLng(31.321518015586836, 120.85264999045884),
//        LatLng(31.321497326158664, 120.85265706372637),
//        LatLng(31.321453793585565, 120.85267213882535),
//        LatLng(31.32143182891931, 120.85267810079642),
//        LatLng(31.321390789513384, 120.85269546166838),
//        LatLng(31.321368406074022, 120.85270381052678),
//        LatLng(31.3213283379593, 120.85272556593787),
//        LatLng(31.321310447767804, 120.85274082766979),
//        LatLng(31.32127456525756, 120.8527651761355),
//        LatLng(31.32125309832737, 120.85277100207816),
//        LatLng(31.32120200214103, 120.85278161541972),
//        LatLng(31.321178521763525, 120.85278610965956),
//        LatLng(31.321133476222027, 120.85280074550307),
//        LatLng(31.32111115944101, 120.85280740535872),
//        LatLng(31.32106628977149, 120.85282183942834),
//        LatLng(31.32104239210616, 120.85282886319246),
//        LatLng(31.32100182753201, 120.85284122098045),
//        LatLng(31.320982234162667, 120.85284879257898),
//        LatLng(31.320940032902193, 120.85287138056185),
//        LatLng(31.320920448613496, 120.85288004579922),
//        LatLng(31.320879497316373, 120.8528956525639),
//        LatLng(31.320857671795714, 120.85290136281375),
//        LatLng(31.320815239280527, 120.85291744410547),
//        LatLng(31.32079345770243, 120.85292851498708),
//        LatLng(31.32075483681744, 120.85294509365912),
//        LatLng(31.320734624106656, 120.85295132671249),
//        LatLng(31.32069354226031, 120.85296511164844),
//        LatLng(31.320673484711325, 120.85297355017167),
//        LatLng(31.32063020126128, 120.85298425425135),
//        LatLng(31.320608814519726, 120.85299559853827),
//        LatLng(31.320568360239196, 120.85302139419574),
//        LatLng(31.32054987030959, 120.85302603289874),
//        LatLng(31.320507249339446, 120.85303680528071),
//        LatLng(31.32048597356289, 120.85304270172576),
//        LatLng(31.32044380710572, 120.85305493912098),
//        LatLng(31.320423829545323, 120.85305849886834),
//        LatLng(31.320376925328322, 120.85307198703528),
//        LatLng(31.320355239589983, 120.85307957343595),
//        LatLng(31.320314227598942, 120.85309388817365),
//        LatLng(31.320307691297252, 120.85309928208504),
//        LatLng(31.320291327838635, 120.8531094811856),
//        LatLng(31.320272918445724, 120.85311687555267),
//        LatLng(31.32023431589164, 120.85312765190457),
//        LatLng(31.3202142563775, 120.8531347666925),
//        LatLng(31.32017135238075, 120.85315019420098),
//        LatLng(31.320150165490027, 120.85315469939444),
//        LatLng(31.320114385615113, 120.8531640322235),
//        LatLng(31.32007434592463, 120.85317965633494),
//        LatLng(31.320052950478384, 120.85318605378123),
//        LatLng(31.32003152996042, 120.85319377086483),
//        LatLng(31.319988531015255, 120.8532062206902),
//        LatLng(31.31996571438451, 120.85321449310223),
//        LatLng(31.31992650782546, 120.85323149717932),
//        LatLng(31.319908100035764, 120.85323944856268),
//        LatLng(31.31987352971381, 120.8532531885539),
//        LatLng(31.319853019704077, 120.85326130221507),
//        LatLng(31.319815318370615, 120.85327722966468),
//        LatLng(31.31979549580158, 120.85328291873873),
//        LatLng(31.319756648323665, 120.85329644278323),
//        LatLng(31.319737141592224, 120.85330584383713),
//        LatLng(31.31969922615745, 120.85331249926863),
//        LatLng(31.319680232424595, 120.85331993774496),
//        LatLng(31.31964229792997, 120.85333603607792),
//        LatLng(31.31962317844945, 120.85334275515196),
//        LatLng(31.31958140386187, 120.85335811460617),
//        LatLng(31.31955987768458, 120.85336410567207),
//        LatLng(31.319521926352845, 120.85338198066468),
//        LatLng(31.31950253096491, 120.85338874326047),
//        LatLng(31.319464028502733, 120.8534079220383),
//        LatLng(31.31944320828954, 120.85341448928386),
//        LatLng(31.31940387855128, 120.85342904142283),
//        LatLng(31.319381999888645, 120.8534372913207),
//        LatLng(31.319343010604246, 120.853449610433),
//        LatLng(31.319321167898437, 120.85345661279176),
//        LatLng(31.319283309103586, 120.85347058935164),
//        LatLng(31.31926267829961, 120.85347859118782),
//        LatLng(31.319219430931813, 120.85349181853918),
//        LatLng(31.3191987611646, 120.8534969216914),
//        LatLng(31.319158315621113, 120.85351463701788),
//        LatLng(31.319138315388543, 120.85352347148931),
//        LatLng(31.319096242921045, 120.85353561775648),
//        LatLng(31.319073748468096, 120.85354484082197),
//        LatLng(31.31902929948767, 120.8535623491431),
//        LatLng(31.319010554396613, 120.85357000247627),
//        LatLng(31.318967881561576, 120.85358952325488),
//        LatLng(31.318946675875615, 120.85359709109984),
//        LatLng(31.318906130662732, 120.85361088850847),
//        LatLng(31.318884385640363, 120.85361546920221),
//        LatLng(31.318839212904397, 120.85361655742264),
//        LatLng(31.31881671633694, 120.85360651884197),
//        LatLng(31.31877854242673, 120.85358180029382),
//        LatLng(31.318760009186477, 120.85356735077245),
//        LatLng(31.318731526226234, 120.85352124654558),
//        LatLng(31.318726501292403, 120.85349712628378),
//        LatLng(31.318713931177687, 120.85344831330478),
//        LatLng(31.318710106940117, 120.85342095484113),
//        LatLng(31.318710689808306, 120.85336869484252),
//        LatLng(31.318711535776718, 120.85334190506559),
//        LatLng(31.31869550010346, 120.85329511801885),
//        LatLng(31.318688521792335, 120.85327157318352),
//        LatLng(31.31868095780981, 120.85322507516878),
//        LatLng(31.318674571996013, 120.8532018722578),
//        LatLng(31.318662201874183, 120.85315125553937),
//        LatLng(31.31865623527996, 120.85312767964498),
//        LatLng(31.31864294528363, 120.8530803283379),
//        LatLng(31.31863887217263, 120.85305641708548),
//        LatLng(31.31862793329027, 120.85300654773941),
//        LatLng(31.318619131032076, 120.85298552848792),
//        LatLng(31.3186053495699, 120.85293636246381),
//        LatLng(31.318597383080593, 120.85291491318058),
//        LatLng(31.318583073074404, 120.852869420459),
//        LatLng(31.31857884082718, 120.85284641137775),
//        LatLng(31.318564011923637, 120.85279682699397),
//        LatLng(31.31855281058812, 120.85277429627246),
//        LatLng(31.318537372878104, 120.85272272334772),
//        LatLng(31.31852775402541, 120.85269699924845),
//        LatLng(31.31851081555908, 120.85264934041615),
//        LatLng(31.3185042305009, 120.85262532017569),
//        LatLng(31.31849279001258, 120.85257776868498),
//        LatLng(31.318488127260572, 120.85255642521338),
//        LatLng(31.318475742101324, 120.85250688282059),
//        LatLng(31.318471536320775, 120.85248283247192),
//        LatLng(31.31845988232641, 120.85243356439054),
//        LatLng(31.318454208812675, 120.85241129834833),
//        LatLng(31.318441902401315, 120.85236702861992),
//        LatLng(31.31843716702931, 120.85234516808357),
//        LatLng(31.318425344280087, 120.85230216099006),
//        LatLng(31.318419732074727, 120.8522799759243),
//        LatLng(31.318407360854962, 120.85223327974049),
//        LatLng(31.318401825164415, 120.85221032935934),
//        LatLng(31.318381766000158, 120.85216960529571),
//        LatLng(31.318378732880614, 120.85214483066086),
//        LatLng(31.318373813098265, 120.85209624994759),
//        LatLng(31.31836739211139, 120.85207251423765),
//        LatLng(31.31835881209404, 120.8520281510623),
//        LatLng(31.31835333943276, 120.85200492328902),
//        LatLng(31.318335803554962, 120.85195753342694),
//        LatLng(31.31833121533995, 120.85193335432977),
//        LatLng(31.318320700870558, 120.85188295173982),
//        LatLng(31.318314831778498, 120.85185740648237),
//        LatLng(31.318303218944365, 120.8518086474031),
//        LatLng(31.318297471359703, 120.8517822547787),
//        LatLng(31.318287983370716, 120.85173746375504),
//        LatLng(31.318280528119274, 120.85171473785576),
//        LatLng(31.318269419460325, 120.85166783144325),
//        LatLng(31.318268073815176, 120.85164223461979),
//        LatLng(31.31826464205347, 120.85159227775506),
//        LatLng(31.318262988717656, 120.85156918519365),
//        LatLng(31.318258870348963, 120.85152076965343),
//        LatLng(31.318255460468094, 120.85149563427112),
//        LatLng(31.31824434998613, 120.85144620392299),
//        LatLng(31.318238621941806, 120.8514234693335),
//        LatLng(31.318227612533466, 120.85137630991117),
//        LatLng(31.318221417940578, 120.85135054952674),
//        LatLng(31.318206546105337, 120.85130627537256),
//        LatLng(31.318201745108496, 120.85128264429898),
//        LatLng(31.318193375749352, 120.85123360286569),
//        LatLng(31.318187580778826, 120.8512116337803),
//        LatLng(31.318174178647627, 120.85116162130637),
//        LatLng(31.3181697317152, 120.85113699188),
//        LatLng(31.318159707869686, 120.8510840016592),
//        LatLng(31.318155276978963, 120.85105896015298),
//        LatLng(31.318142471458934, 120.85101473018798),
//        LatLng(31.318134157304403, 120.85099485271695),
//        LatLng(31.318121121741402, 120.8509357114662),
//        LatLng(31.318118306664815, 120.85091480750673),
//        LatLng(31.318103141011687, 120.85086649324076),
//        LatLng(31.31809532449292, 120.8508433752964),
//        LatLng(31.31808516629419, 120.8507925489486),
//        LatLng(31.3180824571044, 120.85076841514947),
//        LatLng(31.3180760758341, 120.85071802639041),
//        LatLng(31.31807891801073, 120.85069209871737),
//        LatLng(31.318097283001233, 120.85064361041373),
//        LatLng(31.318117510557006, 120.85062639674995),
//        LatLng(31.318157123173705, 120.85061053106897),
//        LatLng(31.31817972375589, 120.8505964672041),
//        LatLng(31.318219733694676, 120.85057813611917),
//        LatLng(31.318239071647007, 120.85056961835579),
//        LatLng(31.318280669571518, 120.85055617427913),
//        LatLng(31.318299226711797, 120.85054769906283),
//        LatLng(31.318341262174545, 120.85052682590148),
//        LatLng(31.31835397701397, 120.85052081999389),
//        LatLng(31.318401830681765, 120.85050058687648),
//        LatLng(31.318424345874547, 120.85049084726069),
//        LatLng(31.318465047683464, 120.85046836857123),
//        LatLng(31.31848653613326, 120.85045817506094),
//        LatLng(31.31853062462943, 120.85044241947394),
//        LatLng(31.318551948825046, 120.85043646552664),
//        LatLng(31.318588486963893, 120.8504280596944),
//        LatLng(31.318625927763414, 120.85040938647776),
//        LatLng(31.318643042802425, 120.85040159779012),
//        LatLng(31.31866261214415, 120.85039317605263),
//        LatLng(31.318702802465076, 120.8503785421564),
//        LatLng(31.318722823456326, 120.85037175582862),
//        LatLng(31.318762468228925, 120.85035098438368),
//        LatLng(31.318781604721504, 120.8503410861741),
//        LatLng(31.318822808818382, 120.85032615599863),
//        LatLng(31.31884587612748, 120.8503184488737),
//        LatLng(31.31888407604709, 120.85029980658713),
//        LatLng(31.318903665743, 120.85029397602368),
//        LatLng(31.31894474322776, 120.85028267642257),
//        LatLng(31.31896349937301, 120.85027489754542),
//        LatLng(31.319005234784857, 120.85026348659439),
//        LatLng(31.31902577984995, 120.85025821003453),
//        LatLng(31.31906681395348, 120.85024559882642),
//        LatLng(31.319086167457435, 120.8502376685683),
//        LatLng(31.319126480159277, 120.85022246860085),
//        LatLng(31.3191466079109, 120.85021545879034),
//        LatLng(31.319187253551192, 120.85020239763551),
//        LatLng(31.319207523527552, 120.850196014675),
//        LatLng(31.319247641849437, 120.8501839495729),
//        LatLng(31.31926802846948, 120.85017659319887),
//        LatLng(31.319307738193757, 120.85016139780699),
//        LatLng(31.319326169049912, 120.8501530413839),
//        LatLng(31.319365886464503, 120.85013861203375),
//        LatLng(31.31938548644379, 120.85012877850464),
//        LatLng(31.31942419281867, 120.85011424958256),
//        LatLng(31.3194446552848, 120.85010894632255),
//        LatLng(31.3194827965119, 120.85009299530934),
//        LatLng(31.319503842894633, 120.85008310059415),
//        LatLng(31.319545668376858, 120.85006742407555),
//        LatLng(31.31956592732598, 120.850059565949),
//        LatLng(31.319605673597785, 120.85004509107337),
//        LatLng(31.319624808764942, 120.85003711882896),
//        LatLng(31.319663921509342, 120.85002038856285),
//        LatLng(31.31968470841058, 120.85001201672138),
//        LatLng(31.319726565162064, 120.85000034489322),
//        LatLng(31.319748392675052, 120.84999284045863),
//        LatLng(31.319790523988328, 120.84997688372299),
//        LatLng(31.319811273708318, 120.84996885670509),
//        LatLng(31.319855781216376, 120.84995277512265),
//        LatLng(31.319878857362454, 120.849948508298),
//        LatLng(31.31992132932412, 120.84993366792288),
//        LatLng(31.319941884683075, 120.84992546351036),
//        LatLng(31.319985772395214, 120.84990728327732),
//        LatLng(31.320005337667435, 120.84989612142166),
//        LatLng(31.3200447573613, 120.84987581537439),
//        LatLng(31.320066006071063, 120.84986755366182),
//        LatLng(31.320106525543896, 120.84984679767332),
//        LatLng(31.320149696096635, 120.84983113282027),
//        LatLng(31.32016993868066, 120.84982023716452),
//        LatLng(31.320209568993405, 120.84981408347141),
//        LatLng(31.320227011069637, 120.84981595947154),
//        LatLng(31.320295120741978, 120.84985801711841),
//        LatLng(31.32066017224263, 120.85110481802549)
//
//    )
//    val aMapLatLngList: ArrayList<AMapLatLng> = ArrayList(latLngList.map { latLng ->
//        AMapLatLng(latLng.latitude, latLng.longitude)
//    })

}
